<?php

namespace app\index\validate;

use think\Validate;

class Questions extends Validate
{
    /**
     * 定义验证规则
     * 格式：'字段名'	=>	['规则1','规则2'...]
     *
     * @var array
     */
	protected $rule = [
        'type_id|题目类型ID' => 'require',
        'style|题目形式' => 'require|in:0,1',
        'text|题干' => 'require|checkText',
        'options|选项' => 'array|checkOptions',
        'answer|答案' => 'require',
        'status|审核结果状态' => 'require|in:1,2',
        'result|受试结果' => 'require|integer|in:1,2',
        'begin|开始时间' => 'require|regex:\d{4}-\d{2}-\d{2}',
        'end|结束时间' => 'require|regex:\d{4}-\d{2}-\d{2}',
    ];

    /**
     * 定义错误信息
     * 格式：'字段名.规则名'	=>	'错误信息'
     *
     * @var array
     */
    protected $message = [
        'style.in' => '题目形式只能在选择、填空之中',
    ];

    /**
     * 场景，键名为对应的函数名
     */
    protected $scene = [
        'createQuestion'  =>  [
            'type_id',
            'style',
            'text',
            'options',
            'answer',
        ],
        'editQuestion'  =>   [
            'type_id',
            'style',
            'text',
            'options',
            'answer',
        ],
        'checkQuestion'  =>   [
            'status',
        ],
        'examQuestion'  =>   [
            'result',
        ],
        'getQuestionStatisticsByAuthor' => [
            'begin',
            'end',
        ],
    ];

    protected function checkText($value, $rule, $data = [])
    {
        if (strpos($value, ' ') !== false) {
            return '题干中中不能包含空格';
        }
        return true;
    }

    protected function checkOptions($value, $rule, $data = [])
    {
        if ($data['style'] === 1) {
            return true;
        }
        if (count($value) < 1) {
            return '选择题至少要求两个或以上选项';
        }
        if (count($value) != count(array_unique($value))) {
            return '不能存在重复选项';
        }
        foreach ($value as $item) {
            if ($item === '') {
                return '不能存在空选项';
            } else if (mb_strlen($item) > 50) {
                return '选项过长，每个选项最多50字';
            } else if (strpos($item, ' ') !== false) {
                return '题目选项中不能包含空格';
            }
        }
        return true;
    }
}
